package com.行为模型.观察者模型;

/**
 * 观察者（Observer）模式的定义：指多个对象间存在一对多的依赖关系，当一个对象的状态发生改变时，
 * 所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式，它是对象行为型模式。
 *
 * 观察者模式是一种对象行为型模式，其主要优点如下。
 * 降低了目标与观察者之间的耦合关系，两者之间是抽象耦合关系。符合依赖倒置原则。
 * 目标与观察者之间建立了一套触发机制。
 *
 * 它的主要缺点如下。
 * 目标与观察者之间的依赖关系并没有完全解除，而且有可能出现循环引用。
 * 当观察者对象很多时，通知的发布会花费很多时间，影响程序的效率。
 * 模式的结构与实现
 *为什么要继承抽象主题呢？ 因为这样在抽象注主题的规范下可以有很多个具体的主题。实现了多态，实现了主题与观察者的解耦。
 *
 * @author chenhs
 * @date 2020/11/14
 */
public class Test {
	public static void main(String[] args) {
		ConcreteSubject c = new ConcreteSubject();
		IObserve o1=new ObserveImpl1();
		IObserve o2=new ObserveImpl2();
		IObserve o3=new ObserveImpl3();
		
		c.addObject(o1);
		c.addObject(o2);
		c.addObject(o3);
		c.broadcast();
		c.remveObject(o1);
		c.broadcast();
	}
}
